package com.example.demo.util;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: YKH
 * Date: 2023-01-31
 * Time: 15:15
 */
public class SecurityUtil {

    /**
     * 加密加盐
     * @param password 原始密码
     * @return
     */
    public static String encrypt(String password) {
        // 每次生成内容不同的，但长度固定 32 位的盐值
        String salt = UUID.randomUUID().toString().replace("-", "");
        // 最终密码=md5(盐值+原始密码)
        String finalPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        return salt + finalPassword;
    }

    /**
     * 解密方法
     * @param password 原始密码
     * @param finalPassword 数据库中的加密密码
     * @return
     */
    public static boolean decrypt(String password, String finalPassword){
        // 非空效验
        if (!StringUtils.hasLength(password) || !StringUtils.hasLength(finalPassword)) {
            return false;
        }

        // 最终密码不正确
        if (finalPassword.length() != 64) {
            return false;
        }

        //对数据库中的密码 取到前32位的盐值
        String slat = finalPassword.substring(0,32);

        //使用盐值对 原始密码进行加密
        String securityPassword = DigestUtils.md5DigestAsHex((slat + password).getBytes());

        //使用盐值 + 加密后的密码进行 与 finalpassword进行比对
        return  (slat+securityPassword).equals(finalPassword);

    }

    public static void main(String[] args) {
        System.out.println( encrypt("admin"));
    }


}
